package com.vae.controller;

import com.vae.mall.common.response.RespResult;
import com.vae.service.MinioService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

/**
 * @author: gec
 * 功能: Minio文件的上传、删除、下载
 * 时间: 2024-04-18 20:53
 */
@RequestMapping("/oss")
@RestController
public class MinioController {
    @Autowired
    private MinioService minioService;


    /**
     *上传
     * @return
     */
    @PostMapping("/upload")
    public RespResult upload(MultipartFile file) {
        String imageUrl="";
        try {
            imageUrl=minioService.uploadFile(file);
        } catch (Exception e) {
            throw new RuntimeException("上传失败");
        }
        return RespResult.ok(imageUrl);
    }


//    /**
//     * 删除
//     * @return
//     */
//    @GetMapping("/delete")
//    public RespResult delete(){
//        try {
//            //删除在bilibili桶的xxmaven.zip文件
//            minioClient.removeObject(RemoveObjectArgs.builder().bucket("bilibili").object("jg.jpg").build());
//            //如果你要删除的文件不在bilibili桶的根目录，而是在bilibili桶里面的temp文件夹，就用下一行
//            //minioClient.removeObject(RemoveObjectArgs.builder().bucket("bilibili").object("temp/xxmaven.zip").build());
//        } catch (Exception e) {
//            throw new RuntimeException("删除失败");
//        }
//        return "删除成功，请到Minio查看";
//    }
//
//
//    /**
//     * 下载
//     * @return
//     */
//    @GetMapping("/download")
//    public RespResult download(){
//        GetObjectArgs getObjectArgs = GetObjectArgs.builder().bucket("bilibili").object("jg.jpg").build();
//        //如果你要下载的文件不在bilibili桶的根目录，而是在bilibili桶的temp文件夹，就用下一行
//        //GetObjectArgs getObjectArgs = GetObjectArgs.builder().bucket("bilibili").object("temp/xxmaven.zip").build();
//        try{
//            //输入流，也就是从你服务器拿文件。操作的是Minio的文件
//            FilterInputStream inputStream = minioClient.getObject(getObjectArgs);
//            //输出流，也就是把拿到的文件下载到你本地电脑。操作的是你本地电脑的文件
//            FileOutputStream outputStream = new FileOutputStream(downloadPath);//下载到你电脑的哪个位置，以及自定义下载后的文件名
//            //输入流拷贝为输出流
//            IOUtils.copy(inputStream,outputStream);
//
//            //【校验文件完整-请确保你下载的文件"下载文件"，是来源于你电脑的文件"原始文件"】
//
//            //判断文件是否下载完成，避免出现文件不完整。原理: 比较两个文件的md5值。比较'原始文件'跟'下载文件'的md5值，如果md5值一样，就说明'下载文件'的完整的
//            FileInputStream originFile = new FileInputStream(filePath);//原始文件。因为Minio的这个文件，其实就是从我们电脑传到Minio，所以原始文件就是本地的文件
//
//            outputStream.close();//把你下载好(走到这就已经是下载好了，只是说不知道是不是完整的)的文件的流关闭掉，不然一直是下载状态，你本地电脑以为还没下载完就一直占用IO资源，导致这里校验拿不到你'下载文件'的IO资源
//            String minio_md5 = DigestUtils.md5Hex(originFile);//'原始文件'的md5值
//            String local_md5 = DigestUtils.md5Hex(new FileInputStream(downloadPath));//‘下载文件’的md5值
//            if(minio_md5.equals(local_md5)){
//                return "下载成功，请到本地电义23 脑指定位置查看";
//            }
//
//        } catch (Exception e) {
//            throw new RuntimeException("下载失败");
//        }
//        return "下载的文件不完整";//请确保你下载的文件"下载文件"，是来源于你电脑的文件"原始文件"
//    }

}
